<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>jQuery方式文件上传</title>
    <script src="./lib/jquery.js"></script>
  </head>

  <body>
    <input type="file" id="file1" />
    <button id="btnUpload">上传文件</button>

    <br />
    <img src="./images/loading.gif" alt="" style="display: none" id="loading" />

    <script>
      $(function () {
        $("#btnUpload").click(function () {
          // 上传URL： http://www.liulongbin.top:3006/api/upload/avatar
          // 参考步骤：
          // 1. 是否选择文件判断
          //    1. 给上传按钮绑定点击事件
          //    2. 通过 $('文件域选择器')[0].files 获取文件列表，判断长度是否大于0
          // 2. 利用 FormData 封装上传的文件
          //    1. 初始化 FormData
          //    2. 利用 append 方法追加文件对象
          // 3. 利用 $.ajax() 发起请求
          //    1. 设置 contentType: false；不修改 Content-Type 属性，使用 FormData 默认的 Content-Type 值
          //    2. 设置 processData: false；不对 FormData 中的数据进行 url 编码，而是将 FormData 数据原样发送到服务器
          // 4. 监听 ajax 开始和结束的监听来显示loading效果
          //    1. 在 ajaxStart(callback) 里面显示 loading
          //    2. 在 ajaxStop(callback) 里面隐藏loading
          $("#btnUpload").on("click", function () {
            let files = $("#file1")[0].files;
            if (files.length <= 0) return alert("请选择要上传的文件");
            let fd = new FormData();
            fd.append("avatar", files[0]);
            $.ajax({
              method: "POST",
              url: "http://www.liulongbin.top:3006/api/upload/avatar",
              data: fd,
              contentType: false,
              processData: false,
              success: (res) => {console.log(res);},
            });
          });
        });
      });
    </script>
  </body>
</html>
